package Vista;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.SwingUtilities;

import Controlador.Sistema;
import DAO.DAOAutomovil;
import DAO.DAOCliente;
import DAO.DAOModelo;
import DAO.dtoAlquiler;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class frmAlquiler extends javax.swing.JFrame {
	private JButton btnCrearAlquiler;
	private JLabel lblCliente;
	private JScrollPane jScrollPane2;
	private JComboBox cmbDescuentos;
	private JLabel lblDescuento;
	private JLabel jLabel1;
	private JTextField txtComentarios;
	private JLabel lblComentarios;
	private JTable tblAlquileres;
	private JScrollPane jScrollPane4;
	private JLabel lblSeleccioneModelo;
	private JTable tblModelo;
	private JScrollPane jScrollPane1;
	private JTable tblAutomovil;
	private JLabel lblAutos;
	private JTable tblClientes;
	private JScrollPane jScrollPane3;
	private JLabel lblFechaDesde;
	private JTextField txtDesde;
	private JLabel lblHasta;
	private JTextField txtHasta;
	private ArrayList<dtoAlquiler> alquileres = new ArrayList<dtoAlquiler>();

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				frmAlquiler inst = new frmAlquiler();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public frmAlquiler() {
		super();
		initGUI();
		LlenarGrillaModelos();
		llenarGrillaClientes();
		BuscarAutomoviles();
		llenarGrillaAlquileres();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				btnCrearAlquiler = new JButton();
				getContentPane().add(btnCrearAlquiler);
				btnCrearAlquiler.setText("Crear Alquiler");
				btnCrearAlquiler.setBounds(526, 220, 109, 40);
				btnCrearAlquiler.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btnCrearAlquilerActionPerformed(evt);
					}
				});
			}
			{
				txtHasta = new JTextField();
				getContentPane().add(txtHasta);
				txtHasta.setText("hasta");
				txtHasta.setBounds(103, 195, 84, 24);
			}
			{
				lblHasta = new JLabel();
				getContentPane().add(lblHasta);
				lblHasta.setText("Hasta");
				lblHasta.setBounds(103, 179, 40, 16);
			}
			{
				txtDesde = new JTextField();
				getContentPane().add(txtDesde);
				txtDesde.setText("desde");
				txtDesde.setBounds(16, 195, 75, 24);
			}
			{
				lblFechaDesde = new JLabel();
				getContentPane().add(lblFechaDesde);
				lblFechaDesde.setText("Desde");
				lblFechaDesde.setBounds(16, 179, 32, 16);
			}
			{
				jScrollPane3 = new JScrollPane();
				getContentPane().add(jScrollPane3);
				jScrollPane3.setBounds(475, 41, 279, 125);
				{
					TableModel tblClientesModel = 
						new DefaultTableModel(
								new String[][] { { "One", "Two" }, { "Three", "Four" } },
								new String[] { "Column 1", "Column 2" });
					tblClientes = new JTable();
					jScrollPane3.setViewportView(tblClientes);
					tblClientes.setModel(tblClientesModel);
					tblClientes.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
					tblClientes.setBounds(684, 34, 36, 39);
				}
			}
			{
				lblCliente = new JLabel();
				getContentPane().add(lblCliente);
				lblCliente.setText("Seleccione el Cliente");
				lblCliente.setBounds(487, 12, 186, 40);
			}
			{
				lblAutos = new JLabel();
				getContentPane().add(lblAutos);
				lblAutos.setText("Seleccione Automovil");
				lblAutos.setBounds(238, 12, 158, 40);
			}
			{
				jScrollPane2 = new JScrollPane();
				getContentPane().add(jScrollPane2);
				jScrollPane2.setBounds(238, 40, 231, 126);
				{
					TableModel tblAutomovilModel = 
						new DefaultTableModel(
								new String[][] { { "One", "Two" }, { "Three", "Four" } },
								new String[] { "Column 1", "Column 2" });
					tblAutomovil = new JTable();
					jScrollPane2.setViewportView(tblAutomovil);
					tblAutomovil.setModel(tblAutomovilModel);
					tblAutomovil.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
					tblAutomovil.setBounds(483, 122, 50, 41);
				}
			}
			{
				jScrollPane1 = new JScrollPane();
				getContentPane().add(jScrollPane1);
				jScrollPane1.setBounds(12, 40, 208, 127);
				{
					TableModel tblModeloModel = 
						new DefaultTableModel(
								new String[][] { { "One", "Two" }, { "Three", "Four" } },
								new String[] { "Column 1", "Column 2" });
					tblModelo = new JTable();
					jScrollPane1.setViewportView(tblModelo);
					tblModelo.setModel(tblModeloModel);
					tblModelo.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
					tblModelo.setBounds(237, 75, 57, 52);
					tblModelo.addMouseListener(new MouseAdapter() {
						public void mouseClicked(MouseEvent evt) {
							tblModeloMouseClicked(evt);
						}
					});
				}
			}
			{
				lblSeleccioneModelo = new JLabel();
				getContentPane().add(lblSeleccioneModelo);
				lblSeleccioneModelo.setText("Seleccione Modelo");
				lblSeleccioneModelo.setBounds(12, 12, 170, 40);
			}
			{
				jScrollPane4 = new JScrollPane();
				getContentPane().add(jScrollPane4);
				jScrollPane4.setBounds(24, 281, 730, 136);
				{
					TableModel tblAlquileresModel = 
						new DefaultTableModel(
								new String[][] { { "One", "Two" }, { "Three", "Four" } },
								new String[] { "Column 1", "Column 2" });
					tblAlquileres = new JTable();
					jScrollPane4.setViewportView(tblAlquileres);
					tblAlquileres.setModel(tblAlquileresModel);
					tblAlquileres.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
					tblAlquileres.setBounds(629, 186, 66, 44);
				}
			}
			{
				lblComentarios = new JLabel();
				getContentPane().add(lblComentarios);
				lblComentarios.setText("Comentarios");
				lblComentarios.setBounds(193, 180, 110, 15);
			}
			{
				txtComentarios = new JTextField();
				getContentPane().add(txtComentarios);
				txtComentarios.setBounds(193, 195, 327, 64);
			}
			{
				jLabel1 = new JLabel();
				getContentPane().add(jLabel1);
				jLabel1.setText("Alquileres");
				jLabel1.setBounds(24, 259, 134, 16);
			}
			{
				lblDescuento = new JLabel();
				getContentPane().add(lblDescuento);
				lblDescuento.setText("Descuento");
				lblDescuento.setBounds(16, 231, 64, 16);
			}
			{
				ComboBoxModel cmbDescuentosModel = 
					new DefaultComboBoxModel(
							new String[] { "1", "2" });
				cmbDescuentos = new JComboBox();
				getContentPane().add(cmbDescuentos);
				cmbDescuentos.setModel(cmbDescuentosModel);
				cmbDescuentos.setBounds(91, 228, 96, 23);
			}
			pack();
			this.setSize(782, 467);
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
	private void tblModeloMouseClicked(MouseEvent evt) {
		BuscarAutomoviles();
	}
	
	private void LlenarGrillaModelos(){
		// Lleno la grilla de modelos

		ArrayList<DAOModelo> modelos = Sistema.Getinstancia().ConsultarModelos();
		
		DefaultTableModel tblModelosModel = new DefaultTableModel();
		
		tblModelosModel.addColumn("marca");
		tblModelosModel.addColumn("modelo");
		tblModelosModel.addColumn("modeloTipo");
		
		for (DAOModelo dm : modelos) {
			
			Vector<String> valores = new Vector<String>();
			
			valores.add(String.valueOf(dm.getMarca()));
			valores.add(dm.getModelo());
			valores.add(dm.getModeloTipo());
			
			tblModelosModel.addRow(valores);
			this.tblModelo.setModel(tblModelosModel);
		}

	}
	
	private void llenarGrillaClientes(){
		// Lleno la grilla de clientes

		ArrayList<DAOCliente> clientes = Sistema.Getinstancia().ConsultarClientes();
		
		DefaultTableModel tblClientesModel = new DefaultTableModel();
		
		tblClientesModel.addColumn("dni");
		tblClientesModel.addColumn("apellido");
		tblClientesModel.addColumn("nombre");
		
		for (DAOCliente daoCliente : clientes) {
			
			Vector<String> valores = new Vector<String>();
			
			valores.add(String.valueOf(daoCliente.getDni()));
			valores.add(daoCliente.getApellido());
			valores.add(daoCliente.getNombre());
			
			tblClientesModel.addRow(valores);
		}

		tblClientes.setModel(tblClientesModel);
		
	}
	
	private void BuscarAutomoviles(){
		
		String marca = "";
		String modelo = "";
		
		JTable tabla = this.tblModelo;
        TableModel tablaModelo;
        tablaModelo = (TableModel) this.tblModelo.getModel();
		
        this.setTitle("Busca");
        
	    int registro = tabla.getSelectedRow();
	    
	    DefaultTableModel tblAutomovilesModel = new DefaultTableModel();
	    tblAutomovilesModel.addColumn("patente");
	    tblAutomovilesModel.addColumn("anio");
	    tblAutomovilesModel.addColumn("kilometraje");
	    
	    if (registro >= 0) {
			marca = ((String) tablaModelo.getValueAt(registro, 0));
			modelo = ((String) tablaModelo.getValueAt(registro, 1));
			
			 this.setTitle(marca + " " + modelo);
			
			ArrayList<DAOAutomovil> listaA = Sistema.Getinstancia().ConsultarAutomoviles(marca, modelo);
			
			
			this.setTitle(String.valueOf(listaA.size()));
			
			for (DAOAutomovil auxAuto : listaA) {
				
				Vector<String> valores = new Vector<String>();
				
				valores.add(auxAuto.getPatente());
				valores.add(String.valueOf(auxAuto.getAnio()));
				valores.add(String.valueOf(auxAuto.getKilometraje()));
				
				tblAutomovilesModel.addRow(valores);
				
			}
			
			this.tblAutomovil.setModel(tblAutomovilesModel);
			
	    }
		
	}

	private void llenarGrillaAlquileres(){
		
		alquileres = Sistema.Getinstancia().obtenerAlquileres();
		
		DefaultTableModel tm = new DefaultTableModel();


		tm.addColumn("Inicio");
		tm.addColumn("Fin");
		tm.addColumn("Modelo");
		tm.addColumn("Estado");
		tm.addColumn("Vigencia");
		tm.addColumn("Limite tanque");
		tm.addColumn("Costo Alquiler");
		tm.addColumn("Costo Devolucion");
		tm.addColumn("Patente");
		
		
		for (dtoAlquiler da : alquileres) {
			Vector<String> valores = new Vector<String>();

			valores.add(da.getFechaInicio());
			valores.add(da.getFechaFin());
			valores.add(da.getTipoModelo());
			valores.add(da.getEstado());
			valores.add(da.getFechaVigencia());
			valores.add(da.getTanqueLimite());
			valores.add(da.getCostoAlquiler());
			valores.add(da.getCostoDevolucion());
			valores.add(da.getAutomovilPatente());
			
			tm.addRow(valores);
			
		}
		
		this.tblAlquileres.setModel(tm);
		
	}	
	
	private void btnCrearAlquilerActionPerformed(ActionEvent evt) {
		
		// Crear el alquiler desde los datos de los controles!
		
		Integer dni = null;
		String desde;
		String hasta; 
		String patente = null;
		
        TableModel tablaModelo;
        tablaModelo = (TableModel) this.tblClientes.getModel();
		
	    int registro = tblClientes.getSelectedRow();
	    if (registro >= 0) {
			dni= Integer.valueOf((String) tablaModelo.getValueAt(registro, 0));
	    }
	    else return;
	    
        tablaModelo = (TableModel) this.tblAutomovil.getModel();
		
	    registro = tblAutomovil.getSelectedRow();
	    if (registro >= 0) {
			patente = (String) tablaModelo.getValueAt(registro, 0);
	    }
	    else return;
		
	    desde = this.txtDesde.getText();
	    hasta = this.txtHasta.getText();
	    
	   // elSistema.RealizarReserva(patente, dni, desde, hasta);
	    // llenarGrillaReservas();
		
		
		
	}

}
